詳解Terraform第3版 1章〜2章
https://gyazo.com/f7bec0609a1a743fbb4ca5e3e0e50472
1章
構成管理、サーバーテンプレーティング、オーケストレーション、プロビジョニングの違い
Ansibleは構成管理
ミュータブルかイミュータブルか、手続き的か宣言的か
2章
region は ap-northeast-1 に読み替えていく
AMIの選択
region 変えたものの ubuntu version CPU arch ほかわからんのでエイヤ
ami-067983a1f071c98a2
ubuntu/images/hvm-ssd/ubuntu-focal-20.04-amd64-server-20240205
code:aws-cli.sh
aws ec2 describe-images --owners amazon --query 'Images*.Name,ImageId' --filters "Name=image-id,Values=ami-067983a1f071c98a2" --output table --profile Webサーバを起動する
EC2インスタンスを plan/apply で作成
user_dataを使ってワンライナーでHTTPサーバを起動する
nohup busybox httpd -f -p 8080 & Bashで実行してもバックグラウンドで動作させるため
SGの作成
Ingress port のfrom/to, CIDRブロックの指定
リソース間の依存グラフは teffarorm が理解できる
terraform graph で可視化もできる
curl で成功を確認
補足的に…
シンプルにするため書籍ではデフォルトVPC, デフォルトサブネットにすべてのリソースをデプロイしている
デフォルトVPCのサブネットはすべてパブリック
実運用ではセキュリティがガバい。ポートスキャンされ脆弱
パブリックサブネットで動かすべきはリパプロやロードバランサーのみ
terraform 変数
map,object(構造体型)も変数にできるの知らなかった
code:var.tf
variable "object_sample" {
type = object({
name = string
tags = list(string)
})
default = {
name = "val1"
}
}
出力変数
スクリプトに噛ませたいパイプしたいなどで便利
Webサーバクラスタのデプロイ
ASGの作成
Terraformは削除してから作り直す=すでに存在する起動設定を参照するASGがある場合削除できないということになる
データソースを使って data VPCサブネットとしてデフォルトVPCを適用
LB作成前にエラーが出ちゃった
│ Error: waiting for Auto Scaling Group (terraform-20240210071853818500000002) capacity satisfied: scaling activity (47f63647-88bf-8abd-58d1-406b5b3b3410): Failed: Authentication Failure. Launching EC2 instance failed.
│ scaling activity (92763647-88bc-fe2f-2128-1410202d318c): Failed: Authentication Failure. Launching EC2 instance failed.
destory してから再度 apply した
ロードバランサー作成
ELBにおける、ALB, NLB, CLB の解説
ALB: HTTP(s)トラフィックのロードバランシング (OSI参照モデルのアプリレイヤー、レイヤ7)
NLB: TCP,UDP,TLS トラフィックのロードバランシング (レイヤ4)
CLB: 今は使われることが少ないが以前からある4,7対応のLB
ここでも指定するサブネットにはデフォルトVPCのの据えてのサブネットを使うがEC2はプライベートサブネット、LBはパブリックサブネット、のようになるはずである
ALBけっこう作成するリソースが多いという印象があってつくるものを再整理しないと理解が難しい
ALB(知るべきは自らのサブネットとSG)
SG(責務はインバウンド、アウトバウンドの値設定)
ALBリスナー(知るべきはALB ARN, 責務はデフォルトの振る舞い)
ALBリスナールール(知るべきはALB ARN, 責務はパスパターンなどの条件とアクション,forwardingなど)
https://gyazo.com/fc00d911026d6739d1d852070c2dd74a
クラスタをデプロイしてLBのDNSからアクセスし確認OK
削除も依存関係を把握して Terraform がよしなに順番をもって削除する